package com.wocai.jrt.orgadmin.investor.service.spi;

import java.util.List;
import java.util.Set;

import com.wocai.jrt.orgadmin.investor.bean.EmpBreifBean;
import com.wocai.jrt.orgadmin.investor.bean.EmpGroupTreeBean;
import com.wocai.jrt.orgadmin.investor.bean.GroupBean;
import com.wocai.jrt.orgadmin.investor.bean.InvestorReqBean;
import com.wocai.jrt.orgadmin.investor.bean.InvestorResBean;
import com.wocai.jrt.orgadmin.investor.bean.MatchReqBean;
import com.wocai.jrt.orgadmin.investor.bean.RelationReqBean;
import com.wocai.jrt.orgadmin.investor.bean.RelationResBean;
import com.wocai.jrt.orgadmin.investor.model.Investor;
import com.wocai.jrt.orgadmin.investor.model.InvestorBean;
import com.wocai.jrt.orgadmin.stats.bean.GroupOdersReqBean;
import com.wocai.jrt.orgadmin.stats.bean.IndexStatsReqBean;
import com.vteba.service.generic.MyBatisService;

/**
 * 投资人相关的业务service接口。
 * @author yinlei
 * @date 2015-8-4 20:08:33
 */
public interface InvestorService extends MyBatisService<Investor, InvestorBean, String> {

	/**
	 * 按检索条件查询投资人
	 * @param InvestorReqBean reqBean
	 * @return List<Investor>
	 */
	 List<Investor> queryFactor(InvestorReqBean reqBean);
	 
	 /**
	 * 获取投资人分组列表
	 * @return List<GroupBean>
	 * @param GroupBean groupBean
	 */
	 List<GroupBean> getGroupList(GroupBean groupBean);
	 
	 /**
	 * 获取投资人列表
	 * @param Investor model
	 * @return List<Investor>
	 */
	List<InvestorResBean> queryMyList(Investor model);
	
	 /**
	 * 获取联系记录列表
	 * @param Investor model
	 * @return List<RelationResBean>
	 */
	List<RelationResBean> queryRelation(Investor model);
	
	 /**
	 * 获取投资人所在分组列表
	 * @param String id
	 * @return List<GroupBean>
	 */
	List<GroupBean> getInvestorGroupList(Investor v);
	
	 /**
	 * 获取投资人所不在在分组列表
	 * @param String id
	 * @return List<GroupBean>
	 */
	List<GroupBean> getOutGroupList(Investor v);
	
	 /**
	 * 获取机构下所有理财师
	 * @param String id
	 * @return List<GroupBean>
	 */
	List<EmpBreifBean> getOrgEmployeeList(String tenantIdentifier,String employeeKey);
	
	 /**
     * 给投资人分配理财师
     * @param MatchReqBean matchReqBean
     * @return boolean
     */
	boolean allotEmp(MatchReqBean matchReqBean);
	
	 /**
     * 获取机构下理财师团队tree
     * @param String orgId
     * @return List<EmpGroupTreeBean>
     */
	EmpGroupTreeBean empTree(String orgId);
	
	/**
	 * 统计全查询的行数
	 * @param model
	 */
	long countQueryBy(Investor model);
	
	/**
	 * 修改投资人分组
	 * @param String groupName
	 */
	int modifyGroup(Investor model);
	
	/**
	 * 新增联系记录
	 * @param RelationReqBean relationReqBean
	 * @return JsonBean
	 */
	int addRela(RelationReqBean relationReqBean);
	
	 /**
     * 新增投资人分组
     * @param GroupBean gBean
     * @return int
     */
	int addGroup(GroupBean gBean);
	
	 /**
     * 删除投资人分组
     * @param GroupBean gBean
     * @return int
     */
	int delGroup(GroupBean gBean);
	
	/**
	 * 重新分配投资人所属分组、重新统计投资人分组人数
	 * @param String id, String[] gStrings
	 * @return  int
	 */
	int saveGroupId(String id, Set<String> gStrings);
	
	 /**
     * 修改投资人分组名
     * @param GroupBean gBean
     * @return int
     */
	int modifyGroup(GroupBean gBean);
	
	 /**
     * 修改投资人信息
     * @param Investor model
     * @return int
     */
	int updateInvestor(Investor model);

	/**
	 * 查询团队下所有的投资人
	 * @param groupOdersReqBean
	 * @return
	 */
	List<Investor> queryGroupInvestorPerformance(GroupOdersReqBean groupOdersReqBean);
	
	int yestodayCount(IndexStatsReqBean indexStatsReqBean);
	
	int turnCount(IndexStatsReqBean indexStatsReqBean);

}
